
import { useMemberStore } from '@/stores'
import { ref} from 'vue'
import { SendUserInfoToServer } from '@/api/login'
import type { LoginData } from '@/types/login'
// 获取会员信息
const memberStore = useMemberStore()
// 定义用户信息和加载状态的响应式变量
const userInfo = ref<any>(null);
const isLoading = ref<boolean>(false);
const loginData = ref<LoginData>({
  jsCode: '',
  avatar: '',
  nickname: '',
  gender: 0,
  language: '',
  city: '',
  province: ''
})

/**
 * 直接获取用户信息（严格由用户点击触发）
 * @param memberStore Vuex store 实例
 * @param SendUserInfoToServer 发送用户信息到服务器的函数
 */
export async function getUserProfileDirectly() {
  // 直接获取用户信息（严格由用户点击触发）
  if (userInfo.value) {
    uni.showToast({
      title: '您已登录',
      icon: 'none'
    })
    return
  }

  isLoading.value = true

  try {
    // 弹出授权提示
    const authRes = await uni.showModal({
      title: '授权提示',
      content: '需要您的授权才能获取用户信息',
      showCancel: false
    })

    if (authRes.confirm) {
      // 调用 uni.getUserProfile 获取用户信息
      const profileRes = await new Promise<any>((resolve, reject) => {
        uni.getUserProfile({
          desc: '用于完善会员资料',
          success: (res) => resolve(res),
          fail: (err) => reject(err)
        })
      })

      userInfo.value = profileRes.userInfo

      // 此时再调用 uni.login 获取 code
      const loginRes = await new Promise<any>((resolve, reject) => {
        uni.login({
          provider: 'weixin',
          success: (res) => resolve(res),
          fail: (err) => reject(err)
        })
      })

      console.log('登录成功，获取到的 code:', loginRes.code)

      // 准备发送到服务器的数据
      loginData.value = {
        jsCode: loginRes.code,
        avatar: profileRes.userInfo.avatar,
        nickname: profileRes.userInfo.nickname,
        gender: profileRes.userInfo.gender,
        language: profileRes.userInfo.language,
        city: profileRes.userInfo.city,
        province: profileRes.userInfo.province
      }

      // 等待服务器响应
      await SendUserInfoToServer(loginData.value)
        .then((res: any) => {
          console.log('服务器返回:', JSON.stringify(res))
          memberStore.setProfile(res.data)
          const token = res.data.accessToken
          if (res && token) {
            memberStore.setToken(token)
          } else {
            throw new Error('服务器未返回 token')
          }
        })
        .catch((error) => {
          console.error('Error:', error)
          uni.showToast({
            title: '登录失败，请稍后再试',
            icon: 'none'
          })
        })
    }
  } catch (err) {
    console.error('操作失败:', err)
    uni.showToast({
      title: '操作失败，请稍后再试',
      icon: 'none'
    })
  } finally {
    isLoading.value = false
  }
}